package dbtools;


/**
 * Title: 客户端工具类,完成 与 ArrayList 向量相关的一些常用功能
 * 
 */
import dbtools.DataSimpDto;

import java.util.ArrayList;

public class EditDto implements java.io.Serializable {

	private ArrayList data; //新值 
	private String[] arrstr;

	//构造子
	public EditDto(ArrayList newvec) {
		data = newvec;
		arrstr = new String[this.getRecord()];
		for (int i = 0; i < arrstr.length; i++) {
			arrstr[i] = "";
		}
	}
	public EditDto(String sNewSql) {
		DataSimpDto tmparr = new DataSimpDto(sNewSql);

		data = tmparr.getDataDto();
		arrstr = new String[this.getRecord()];
		for (int i = 0; i < arrstr.length; i++) {
			arrstr[i] = "";
		}
	}

	/**
	 * 清空数据
	 */
	public final void clear() {
		data.clear();
		data = null;
		arrstr = null;
	}
	/**
	 * 返回数据集
	 */
	public final ArrayList getArrayList() {
		return data;
	}
	/**
	 * 得到向量结果集的总字段数
	 *
	 * @return (int) retint 总字段数
	 *
	 */
	public final int getField() {
		DataSimpDto pubTemp = new DataSimpDto(data);
		return pubTemp.getTotField();
	}

	/**
	 * 得到向量结果集的第 N 个字段的名称
	 *
	 * @param  (int) 第 N 个字段
	 * @return (String) retstring 字段名称
	 *
	 */
	public final String getFieldName(int n) {
		DataSimpDto pubTemp = new DataSimpDto(data);
		return pubTemp.getFieldName(n);
	}

	/**
	 * 得到向量结果集的总记录数
	 *
	 * @return (int) retint 总记录数
	 *
	 */
	public final int getRecord() {
		if (data == null)
			return 0;
		else {
			DataSimpDto pubTemp = new DataSimpDto(data);
			return pubTemp.getTotRecord();
		}
	}
	/**
	 * 得到向量结果集是否有值
	 *
	 * @return (boolean) true --有值 false --无值
	 *
	 */
	public final boolean hasData() {
		if (data == null)
			return false;

		DataSimpDto pubTemp = new DataSimpDto(data);
		if (pubTemp.getTotRecord() < 1)
			return false;

		return true;
	}

	/**
	 * 得到向量结果集某一字段 第 n 条记录的值
	 *
	 * @param (String)numbername 字段名  //第几个字段
	 * @param (int) recordno  第几条记录
	 * @return (String) retstr 返回的记录值
	 *
	 */
	public final String getValue(int number, int recordno) {
		DataSimpDto pubTemp = new DataSimpDto(data);
		return pubTemp.getDataValue(number, recordno);
	}
	public final String getValue(String fieldname, int recordno) {
		DataSimpDto pubTemp = new DataSimpDto(data);
		return pubTemp.getDataValue(fieldname, recordno);
	}

	/**
	 * 得到向量结果集某一字段 第 n 条记录的值，如果该字段不存在，返回空字符串""
	 * @param fieldname 字段名
	 * @param recordno  第 n 条记录
	 * @return  记录值
	 */
	public final String getValueNew(String fieldname, int recordno) {
		//		if (!fieldExists(fieldname))
		//			return "";

		DataSimpDto pubTemp = new DataSimpDto(data);
		return pubTemp.getDataValue(fieldname, recordno);
	}
	/**
	 * 判断字段名为 fieldname 的字段是否在数据集里存在。
	 * @param fieldname
	 * @return
	 */
	public final boolean fieldExists(String fieldname) {
		for (int i = 0; i <= getField(); i++) {
			if (getFieldName(i).trim().equalsIgnoreCase(fieldname))
				return true;
		}
		return false;
	}
	/**
	 * 给向量结果集某一字段 第 n 条记录 赋值
	 *
	 * @param (String)numbername 字段名 //第几个字段
	 * @param (int) recordno  第几条记录
	 * @param (String)newstr  新值
	 *
	 */
	public final void setValue(int number, int recordno, String newstr) {
		DataSimpDto pubTemp = new DataSimpDto(data);
		pubTemp.setDataValue(number, recordno, newstr);
	}
	public final void setValue(String fieldname, int recordno, String newstr) {
		DataSimpDto pubTemp = new DataSimpDto(data);

		pubTemp.setDataValue(fieldname, recordno, newstr);
	}
	/**
	 * 根据某个字段的值，得到另一个字段的值（仅返回发现的第一条记录）
	 *
	 * @param (int)    column        所依据字段的序号
	 * @param (String) value         所依据字段的值
	 * @param (int)    columnWanted  希望得到值的字段的序号
	 *
	 */
	public final String getOneOnOther(
		int column,
		String value,
		int columnWanted) {

		String valueWanted = "notfounded";

		for (int i = 1; i <= getRecord(); i++) {
			if (getValue(column, i - 1).equals(value)) {
				valueWanted = getValue(columnWanted, i - 1);
				break;
			}
		}
		return valueWanted;

	}

	public final String getOneOnOther(
		String column,
		String value,
		String columnWanted) {

		String valueWanted = "notfounded";

		for (int i = 1; i <= getRecord(); i++) {
			if (getValue(column, i - 1).equals(value)) {
				valueWanted = getValue(columnWanted, i - 1);
				break;
			}
		}
		return valueWanted;

	}

	/**
	 * 对于给定特定主键记录的某一字段赋值
	 *
	 * @param (String)numbername 字段名 //第几个字段
	 * @param (int) key  给定特定主键
	 * @param (String)newstr  新值
	 *
	 */
	public final void setValue(int number, String key, String newstr) {

		DataSimpDto pubTemp = new DataSimpDto(data);
		for (int s = 0; s < pubTemp.getTotRecord(); s++) {
			String keyvalue = pubTemp.getDataValue(0, s);
			if (keyvalue.equals(key)) {
				pubTemp.setDataValue(number, s, newstr);
				return;
			}
		}

	}
	public final void setValue(String fieldname, String key, String newstr) {
		DataSimpDto pubTemp = new DataSimpDto(data);
		for (int s = 0; s < pubTemp.getTotRecord(); s++) {
			String keyvalue = pubTemp.getDataValue(0, s);
			if (keyvalue.equals(key)) {
				pubTemp.setDataValue(fieldname, s, newstr);
				return;
			}
		}
	}

	/**
	 * 选择标记控制
	 * 
	 */
	public final void setMark(int number) {
		arrstr[number] = "*";
	}
	public final void setUnMark(int number) {
		arrstr[number] = "";
	}
	public final void setUnMark(int beginnum, int endnum) {
		for (int s = beginnum; s < endnum; s++) {
			arrstr[s] = "";
		}
	}
	public final void setMark(int beginnum, int endnum) {
		for (int s = beginnum; s < endnum; s++) {
			arrstr[s] = "*";
		}
	}
	public final void setAllMark() {
		for (int i = 0; i < arrstr.length; i++) {
			arrstr[i] = "*";
		}
	}
	public final void setUnAllMark() {
		for (int i = 0; i < arrstr.length; i++) {
			arrstr[i] = "";
		}
	}
	public final boolean isMark(int number) {
		return arrstr[number].trim() == "*" ? true : false;
	}

}
